@model (string Key, object Value, int Level)

@functions {
    private bool IsValidURL(string source)
    {
        return Uri.TryCreate(source, UriKind.Absolute, out var uriResult) &&
            (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
    }
}

@if (Model.Value is string str)
{
    if (!string.IsNullOrEmpty(Model.Key))
    {
        <th>@Model.Key</th>
    }
    <td style="white-space:pre-wrap" class="@(string.IsNullOrEmpty(Model.Key) ? null : "text-end")">@* Explicitely remove whitespace at front here *@@if (IsValidURL(str)){<a href="@str" target="_blank" rel="noreferrer noopener">@str</a>}else {@str.Trim()}</td>
}
else if (Model.Value is Dictionary<string, object> { Count: > 0 } subItems)
{
    <td colspan="2">
        @{
            @if (!string.IsNullOrEmpty(Model.Key))
            {
                Write(Html.Raw($"<h{Model.Level + 3} class=\"mb-3 fw-semibold\">"));
                Write(Model.Key);
                Write(Html.Raw($"</h{Model.Level + 3}>"));
            }
        }
        <partial name="PosData" model="@((subItems, Model.Level + 1))" />
    </td>
}
else if (Model.Value is IEnumerable<object> valueArray)
{
    <td colspan="2">
        @{
            @if (!string.IsNullOrEmpty(Model.Key))
            {
                Write(Html.Raw($"<h{Model.Level + 3} class=\"mb-3 fw-semibold\">"));
                Write(Model.Key);
                Write(Html.Raw($"</h{Model.Level + 3}>"));
            }
        }
        @foreach (var item in valueArray)
        {
            @if (item is Dictionary<string, object> { Count: > 0 } subItems2)
            {
                <partial name="PosData" model="@((subItems2, Model.Level + 1))" />
            }
            else
            {
                <partial name="PosData" model="@((new Dictionary<string, object> { { "", item } }, Model.Level + 1))" />
            }
        }
    </td>
}
